home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
t_os
/
wstype
/
source
/
whelp.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-10-18
|
6KB
|
275 lines
/*** [whelp.c]
*
* ヘルプウィンドウ (C)ささがわ
*
* For GNU C Compiler (GCC) Version 1.39
*
***/
#include <mos.h>
#include "graph.h"
#include "window.h"
#include "others.h"
#define WH_CAN 1
#define WH_TITLE 2
#define WH_BACK 3
#define WH_NEXT 4
#define WH_OTHER 0
extern int PAL_Black, PAL_Button;
static int wx, wy;
static int nPage = 8, Page;
const static char *help[][8] = {
{
/* " 40桁 " */
"",
" WSType Version 1.0",
"",
"",
" 補 足 説 明 書",
"",
"",
" Copyright (C)ささがわ Aug. 18, 1991 "
}, {
"・影付きのウィンドウは特別な扱いに",
" なっています 他を操作したい場合は",
" それを消してから行ってください",
"",
"・ワイド型ファイルセレクタを操作中",
" ツリー表示を中断させたい場合は",
" マウスの右ボタンをクリックして",
" ください 1/7"
}, {
"・警告音のPCMサウンドには",
" 再生できる音程に限界があります",
"",
"・スコープを移動する場合は 画面左上の",
" ボタン上で左ボタンを押し 1秒ほど",
" 待ってからドラッグさせ ボタンから手を",
" 放してください",
" 2/7"
}, {
"《起動時オプション》",
" ◆表示方法",
" /tabm {0|1} タブ記号の表示(0)",
" /crm {0|1} 改行記号の表示(1)",
" /tab {1|2|4|8} タブ長(8)",
" /lg {0~4} 行間隔(2)",
" /lc {0|20~500} 横幅(80)",
" 3/7"
}, {
" ◆背景画",
" /bg-tiff <ファイル名> TIFFファイル",
" /bg-tile <ファイル名> <番号> タイリング",
" /bg-beta <色番号> ベタ塗り",
"",
" ◆スクロール",
" /scspd {0~4} スクロール・スピード(2)",
" 4/7"
}, {
" ◆警告音",
" /wa-beep ビープ音",
" /wa-pcm <ファイル名> pcmサウンド",
"",
" ◆ファイルセレクタ",
" /fcap {0|1} 0:小文字 1:大文字",
" /fsort {0~3} ソート方法",
" 5/7"
}, {
" /fwide {0|1} 0:標準 1:ワイド",
"",
" ◆その他",
" /m 終了時にMS-DOS画面へ",
"",
" 頭に / の付かないものは",
" テキストファイル名と見なします",
" 6/7"
}, {
"《作者からの一言》",
"",
" その他、質問・要望等がありましたら",
" 作者までご連絡ください。",
" (感想・バグの報告などもお待ち)",
" (しています。 )",
"",
" 7/7"
}
};
static void Open_window(void);
static int Where(int, int);
static void DrawHelp(void);
static void SUB_page(int);
static int SUB_page_sub(int);
static void Indicate(int, int);
void WIND_help(void) {
int ret = 0;
wx = 152;
wy = 142;
{
struct RECT a, b;
a.x1 = 319; a.y1 = 259;
a.x2 = 320; a.y2 = 260;
b.x1 = wx; b.y1 = wy;
b.x2 = wx + 335; b.y2 = wy + 196;
afterImage(&a, &b);
}
Page = 0;
Open_window();
while (!ret) {
char mb;
int mx, my;
CLOCK(0);
if (MOS_rdpos(&mb, &mx, &my), !(mb & 1))
continue;
switch (Where(mx, my)) {
case WH_CAN:
if (Button(wx + 6, wy + 6, wx + 25, wy + 25))
ret = -1;
break;
case WH_TITLE:
{
struct RECT w, s;
s.x1 = 0; s.y1 = 40;
s.x2 = 639; s.y2 = 463;
w.x1 = wx; w.y1 = wy;
w.x2 = wx + 335; w.y2 = wy + 196;
if (dragWindow(mx, my, &w, &s, 0, 0)) {
wx = w.x1; wy = w.y1;
MOS_disp(0);
EGB_cls(0);
MOS_disp(1);
Open_window();
}
}
break;
case WH_BACK: SUB_page(0); break;
case WH_NEXT: SUB_page(1); break;
default:
while (MOS_rdpos(&mb, &mx, &my), mb & 1);
break;
}
}
return;
}
static void Open_window(void) {
int a[2] = {4, 4};
struct opnwin_t opw;
opw.title = "ヘ ル プ";
opw.x1 = wx;
opw.y1 = wy;
opw.x2 = opw.x1 + 335;
opw.y2 = opw.y1 + 196;
opw.shdw = 1;
opw.canb = 1;
opw.nopt = 2;
opw.wopt = a;
opw.expb = 0;
opw.ord = 0;
MOS_disp(0);
drawWindow(&opw);
Indicate(1, 1);
DrawHelp();
MOS_disp(1);
}
static int Where(int x, int y) {
int ret;
x -= wx;
y -= wy;
if (5 < x && x < 26 && 5 < y && y < 26)
ret = WH_CAN;
else if (26 < x && x < 256 && 5 < y && y < 26)
ret = WH_TITLE;
else if (256 < x && x < 293 && 5 < y && y < 26)
ret = WH_BACK;
else if (293 < x && x < 330 && 5 < y && y < 26)
ret = WH_NEXT;
else
ret = WH_OTHER;
return ret;
}
static void Indicate(int a, int b) {
if (a)
EGB_str("前頁", wx + 259, wy + 23, Page > 0 ? PAL_Black : 7);
if (b)
EGB_str("次頁", wx + 296, wy + 23, Page < nPage - 1 ? PAL_Black : 7);
}
static void DrawHelp(void) {
int i;
EGB_boxf(wx + 8, wy + 29, wx + 327, wy + 188, 7, 7);
for (i = 0; i < 8; i++)
EGB_str3(help[Page][i], wx + 8, wy + 46 + i * 20, PAL_Black, 7);
}
static void SUB_page(int mode) {
int flpush = 1, fllast = 0;
int lx, ly, mx, my;
char mb;
if (mode && Page >= nPage - 1 || !mode && Page <= 0) {
while (MOS_rdpos(&mb, &mx, &my), mb & 1);
return;
}
lx = wx + (mode ? 294 : 257);
ly = wy + 6;
EGB_rev(1, lx, ly, lx + 35, ly + 19);
fllast = SUB_page_sub(mode);
TIMER_set(30);
while (MOS_rdpos(&mb, &mx, &my), mb & 1 && !fllast) {
int whres;
whres = Where(mx, my) == (mode ? WH_NEXT : WH_BACK);
if (!whres && flpush || whres && !flpush) {
EGB_rev(1, lx, ly, lx + 35, ly + 19);
flpush = !flpush;
}
if (flpush && TIMER())
fllast = SUB_page_sub(mode);
}
MOS_disp(0);
Indicate(1, 1);
MOS_disp(1);
if (fllast)
while (MOS_rdpos(&mb, &mx, &my), mb & 1);
}
static int SUB_page_sub(int mode) {
int result = 1;
if (mode && Page < nPage - 1 || !mode && Page > 0) {
mode ? Page++ : Page--;
MOS_disp(0);
DrawHelp();
Indicate(mode ? 1 : 0, mode ? 0 : 1);
MOS_disp(1);
result = 0;
}
return result;
}